<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="utf-8">
	<title>DenoiseNode - Three.js Docs</title>
	<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
	<script src="../scripts/highlight.min.js"></script>
	<link type="text/css" rel="stylesheet" href="../styles/highlight-three.css">
	<link type="text/css" rel="stylesheet" href="../styles/page.css">
</head>
<body>
		<p class="inheritance" translate="no"><a href="EventDispatcher.html">EventDispatcher</a> → <a href="Node.html">Node</a> → <a href="TempNode.html">TempNode</a> → </p>
	<h1 translate="no">DenoiseNode</h1>
		<section>
			<header>
				<div class="class-description"><p>Post processing node for denoising data like raw screen-space ambient occlusion output.
Denoise can noticeably improve the quality of ambient occlusion but also add quite some
overhead to the post processing setup. It's best to make its usage optional (e.g. via
graphic settings).</p>
<p>Reference: <a href="https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf" target="_blank" rel="noopener">https://openaccess.thecvf.com/content/WACV2021/papers/Khademi_Self-Supervised_Poisson-Gaussian_Denoising_WACV_2021_paper.pdf</a>.</p></div>
			</header>
			<article>
				<h2 class="subsection-title">Import</h2>
				<p><span translate="no">DenoiseNode</span> is an addon, and must be imported explicitly, see <a href="https://threejs.org/manual/#en/installation" target="_blank" rel="noopener">Installation#Addons</a>.</p>
				<pre><code class="language-js">import { denoise } from 'three/addons/tsl/display/DenoiseNode.js';</code></pre>
				<div class="container-overview">
					<h2>Constructor</h2>
					<h3 class="name name-method" id="DenoiseNode" translate="no">new <a href="#DenoiseNode">DenoiseNode</a><span class="signature">( textureNode : <span class="param-type"><a href="TextureNode.html">TextureNode</a></span>, depthNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;float></span>, normalNode : <span class="param-type"><a href="Node.html">Node</a>.&lt;vec3></span>, camera : <span class="param-type"><a href="Camera.html">Camera</a></span> )</span> </h3>
					<div class="method">
						<div class="description">
							<p>Constructs a new denoise node.</p>
						</div>
						<table class="params">
							<tbody>
								<tr>
									<td class="name">
										<strong>textureNode</strong>
									</td>
									<td class="description last">
										<p>The texture node that represents the input of the effect (e.g. AO).</p>
									</td>
								</tr>
								<tr>
									<td class="name">
										<strong>depthNode</strong>
									</td>
									<td class="description last">
										<p>A node that represents the scene's depth.</p>
									</td>
								</tr>
								<tr>
									<td class="name">
										<strong>normalNode</strong>
									</td>
									<td class="description last">
										<p>A node that represents the scene's normals.</p>
									</td>
								</tr>
								<tr>
									<td class="name">
										<strong>camera</strong>
									</td>
									<td class="description last">
										<p>The camera the scene is rendered with.</p>
									</td>
								</tr>
							</tbody>
						</table>
					</div>
				</div>
				<h2 class="subsection-title">Properties</h2>
				<div class="member">
					<h3 class="name" id="depthNode" translate="no">.<a href="#depthNode">depthNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;float></span> </h3>
					<div class="description">
						<p>A node that represents the scene's depth.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="depthPhi" translate="no">.<a href="#depthPhi">depthPhi</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a>.&lt;float></span> </h3>
					<div class="description">
						<p>The depth Phi value.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="index" translate="no">.<a href="#index">index</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a>.&lt;float></span> </h3>
					<div class="description">
						<p>The index.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="lumaPhi" translate="no">.<a href="#lumaPhi">lumaPhi</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a>.&lt;float></span> </h3>
					<div class="description">
						<p>The luma Phi value.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="noiseNode" translate="no">.<a href="#noiseNode">noiseNode</a><span class="type-signature"> : <a href="TextureNode.html">TextureNode</a></span> </h3>
					<div class="description">
						<p>The node represents the internal noise texture.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="normalNode" translate="no">.<a href="#normalNode">normalNode</a><span class="type-signature"> : <a href="Node.html">Node</a>.&lt;vec3></span> </h3>
					<div class="description">
						<p>A node that represents the scene's normals. If no normals are passed to the
constructor (because MRT is not available), normals can be automatically
reconstructed from depth values in the shader.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="normalPhi" translate="no">.<a href="#normalPhi">normalPhi</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a>.&lt;float></span> </h3>
					<div class="description">
						<p>The normal Phi value.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="radius" translate="no">.<a href="#radius">radius</a><span class="type-signature"> : <a href="UniformNode.html">UniformNode</a>.&lt;float></span> </h3>
					<div class="description">
						<p>The radius.</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="textureNode" translate="no">.<a href="#textureNode">textureNode</a><span class="type-signature"> : <a href="TextureNode.html">TextureNode</a></span> </h3>
					<div class="description">
						<p>The texture node that represents the input of the effect (e.g. AO).</p>
					</div>
				</div>
				<div class="member">
					<h3 class="name" id="updateBeforeType" translate="no">.<a href="#updateBeforeType">updateBeforeType</a><span class="type-signature"> : string</span> </h3>
					<div class="description">
						<p>The <code>updateBeforeType</code> is set to <code>NodeUpdateType.FRAME</code> since the node updates
its internal uniforms once per frame in <code>updateBefore()</code>.</p>
						<p>Default is <code>'frame'</code>.</p>
					</div>
						<dl class="details">
							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBeforeType">TempNode#updateBeforeType</a></dt>
						</dl>
				</div>
				<h2 class="subsection-title">Methods</h2>
					<h3 class="name name-method" id="setup" translate="no">.<a href="#setup">setup</a><span class="signature">( builder : <span class="param-type"><a href="NodeBuilder.html">NodeBuilder</a></span> )</span><span class="type-signature"> : ShaderCallNodeInternal</span> </h3>
					<div class="method">
						<div class="description">
							<p>This method is used to setup the effect's TSL code.</p>
						</div>
						<table class="params">
							<tbody>
								<tr>
									<td class="name">
										<strong>builder</strong>
									</td>
									<td class="description last">
										<p>The current node builder.</p>
									</td>
								</tr>
							</tbody>
						</table>
						<dl class="details">
							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#setup">TempNode#setup</a></dt>
						</dl>
					</div>
					<h3 class="name name-method" id="updateBefore" translate="no">.<a href="#updateBefore">updateBefore</a><span class="signature">( frame : <span class="param-type"><a href="NodeFrame.html">NodeFrame</a></span> )</span> </h3>
					<div class="method">
						<div class="description">
							<p>This method is used to update internal uniforms once per frame.</p>
						</div>
						<table class="params">
							<tbody>
								<tr>
									<td class="name">
										<strong>frame</strong>
									</td>
									<td class="description last">
										<p>The current node frame.</p>
									</td>
								</tr>
							</tbody>
						</table>
						<dl class="details">
							<dt class="tag-overrides"><strong>Overrides:</strong> <a href="TempNode.html#updateBefore">TempNode#updateBefore</a></dt>
						</dl>
					</div>
				<h2 class="subsection-title">Source</h2>
				<p>
					<a href="https://github.com/mrdoob/three.js/blob/master/examples/jsm/tsl/display/DenoiseNode.js" translate="no" target="_blank" rel="noopener">examples/jsm/tsl/display/DenoiseNode.js</a>
				</p>
			</article>
		</section>
<script src="../scripts/linenumber.js"></script>
<script src="../scripts/page.js"></script>
</body>
</html>